package com.bestcem.xm.user.service;

import org.springframework.mail.javamail.JavaMailSenderImpl;

import javax.validation.constraints.NotNull;
import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * 发送短信相关服务
 *
 * @author panyun <yun.pan@idiaoyan.com>
 * @version v1.0
 * @date 2022/3/11 10:48
 */
public interface MailService {

    /**
     * 发送邮件，携带附件
     *
     * @param to            收件人列表
     * @param cc            抄送人列表
     * @param subject       消息主题
     * @param content       邮件内容
     * @param enclosureFiles 附件列表
     * @return boolean 发送结果
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/06/01 15:14
     */
    boolean sendEmailAndEnclosure(@NotNull String[] to, String[] cc, String subject, String content, Map<String, File> enclosureFiles);
    
    /**
     * 发送邮件
     *
     * @param to       接收邮箱列表
     * @param subject  主题
     * @param fileName 邮件模板地址
     * @param map      需要替换的参数，以及对应的值
     * @return boolean
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/4 13:57
     */
    boolean sendEmail(@NotNull String[] to, String subject, @NotNull String fileName, HashMap<String, Object> map);

    /**
     * 发送邮件
     *
     * @param to      接收邮箱列表
     * @param subject 主题
     * @param content 内容
     * @return boolean 发送结果
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/06/08 11:49
     */
    boolean sendEmail(@NotNull String[] to, String subject, String content);

    /**
     * 发送邮件
     *
     * @param javaMailSender 邮件发送服务类
     * @param from           发送邮箱
     * @param to             接收邮箱列表
     * @param subject        主题
     * @param fileName       邮件模板地址
     * @param map            需要替换的参数，以及对应的值
     * @return boolean
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/4/20 15:38
     */
    boolean sendEmail(JavaMailSenderImpl javaMailSender, String from, @NotNull String[] to, String subject, @NotNull String fileName, HashMap<String, Object> map);

    /**
     * 读取html页面，并替换参数
     *
     * @param fileName 模板文件
     * @param map      参数
     * @return java.lang.String
     * @author panyun <yun.pan@idiaoyan.com>
     * @date 2022/3/7 11:23
     */
    String buildContent(String fileName, HashMap<String, Object> map);

    /**
     * 构建发送人信息
     *
     * @param host     host
     * @param port     端口
     * @param userName 用户名
     * @param password 密码
     * @return org.springframework.mail.javamail.JavaMailSenderImpl
     * @author cuiqiongyu <qiongyu.cui@idiaoyan.cn>
     * @date 2022/07/14 18:27
     */
    JavaMailSenderImpl buildMailSender(String host, Integer port, String userName, String password);


    /**
     *
     * @param to            收件人列表
     * @param cc            抄送人列表
     * @param subject       消息主题
     * @param fileName      邮件模板地址
     * @param map           需要替换的参数，以及对应的值
     * @return boolean
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/06/19 15:56
     */
     boolean emailSendAndNotifyOm(@NotNull String[] to,
                                     String[] cc,
                                     String subject,
                                     @NotNull String fileName,
                                     HashMap<String, Object> map);

    /**
     * 发送邮件，同时通知om
     *
     * @param javaMailSender 发件人信息
     * @param from           发送问
     * @param to             收件人列表
     * @param cc             抄送人列表
     * @param subject        消息主题
     * @param fileName       邮件模板地址
     * @param map            需要替换的参数，以及对应的值
     * @return boolean
     * @author Linzhijian <zhijian.lin@idiaoyan.com>
     * @date 2022/06/19 15:56
     */

    boolean emailSendAndNotifyOm(JavaMailSenderImpl javaMailSender,
                                 String from,
                                 @NotNull String[] to,
                                 String[] cc,
                                 String subject,
                                 @NotNull String fileName,
                                 HashMap<String, Object> map);

}
